printing: Fix origin for scaled, rotated pages
authorLeo Wolf <jclw@ymail.com>
Wed, 26 Nov 2014 20:18:36 +0000 (20:18 +0000)
committerMarek Kasik <mkasik@redhat.com>
Thu, 27 Nov 2014 11:21:27 +0000 (12:21 +0100)
The calls to cairo_translate in
_gtk_print_context_rotate_according_to_orientation,
_gtk_print_context_reverse_according_to_orientation and
_gtk_print_context_translate_into_margin assume an unscaled context.
These functions should therefore be called before scaling the context,
otherwise the origin does not always end up in the top left corner.

https://bugzilla.gnome.org/show_bug.cgi?id=740742

gtk/gtkprintoperation.c

index d13f6bc89afef8dbfb2b287d067f0967df019a74..1f45c4fec557915c8654a43c94e30e1249fabb63 100644 (file)
@@ -2488,17 +2488,22 @@ common_render_page (GtkPrintOperation *op,
   cr = gtk_print_context_get_cairo_context (print_context);
   
   cairo_save (cr);
-  if (priv->manual_scale != 1.0 && priv->manual_number_up <= 1)
-    cairo_scale (cr,
-                priv->manual_scale,
-                priv->manual_scale);
   
   if (priv->manual_orientation)
     _gtk_print_context_rotate_according_to_orientation (print_context);
   else
     _gtk_print_context_reverse_according_to_orientation (print_context);
 
-  if (priv->manual_number_up > 1)
+  if (priv->manual_number_up <= 1)
+    {
+      if (!priv->use_full_page)
+        _gtk_print_context_translate_into_margin (print_context);
+      if (priv->manual_scale != 1.0)
+        cairo_scale (cr,
+                     priv->manual_scale,
+                     priv->manual_scale);
+    }
+  else
     {
       GtkPageOrientation  orientation;
       GtkPageSetup       *page_setup;
@@ -2678,9 +2683,6 @@ common_render_page (GtkPrintOperation *op,
           cairo_rotate (cr, - G_PI / 2);
         }
     }
-  else
-    if (!priv->use_full_page)
-      _gtk_print_context_translate_into_margin (print_context);
   
   priv->page_drawing_state = GTK_PAGE_DRAWING_STATE_DRAWING;